package com.mk.msg.template.base;

import java.util.Map;
import java.util.Set;

@SuppressWarnings("unused")
public interface MsgTemplate {
    /**
     * 消息主体,短信不会直接发送此内容
     * 支持魔术字符串
     */
    String msg();

    /**
     * 路由地址
     * 支持魔术字符串
     */
    String murl();

    /**
     * 消息标题
     * 支持魔术字符串
     */
    String title();

    /**
     * 图片code
     */
    String pic();

    /**
     * 扩展参数
     */
    Map<String, String> params();


    /**
     * 指定接收电话号码，一般用于指定非系统用户
     * 系统用户直接指定userid即可
     * 当同时制定phone和userid时，都会发送，但不会重复发同样的号码
     */
    Set<String> phones();

    /**
     * 指定用户id,
     * 将会查询到这些用户的手机号码进行发送短信
     * 发送app推送
     * 发送页面推送
     */
    Set<String> userids();

    /**
     * 用户类型,参见GlobalValues.USERTYPE;
     * 用于指定哪些用户收消息
     */
    Set<String> usertypes();

    /**
     * 消息渠道
     * MessChannel.xxx.mask | MessChannel.xxx.mask
     */
    int _channels();

    /**
     * 消息类型,随便定义,为了以后按类型查看消息的扩展
     * 最好使用Glovalues
     */
    String _mtype();

    /**
     * 指定短信编码
     */
    String _sms_code();

    /**
     * 存储到数据库吗
     *
     */
    boolean _save();


    enum MessChannel {
        SMS, APP, WEB, EMAIL, WX;

        public final int mask;

        MessChannel() {
            mask = (1 << ordinal());
        }

        public boolean isEnabled(int channels) {
            return (channels & mask) != 0;
        }

        public boolean isNotEnabled(int channels) {
            return !isEnabled(channels);
        }
    }

}
